// 输入一个正整数数组,把数组所有的数字拼接出来排成一个数，输出能拼接出来所有数字中最小的一个

const numMin = (arr: number[]) => {
  for (let i = 0; i < arr.length; i++) {
    for (let j = i + 1; j < arr.length; j++) {
      if (arr[i] > arr[j]) {
        const tmp = arr[i]
        arr[i] = arr[j]
        arr[j] = tmp
      }
    }
  }
  return Number(arr.join(''))
}

console.log(numMin([5, 4, 3, 1, 2, 5, 4, 4, 82]))


// 给定任意二维数组，输出所有的排列组合项。比如 [['A','B', 'C'], ['a','b', 'c'], [1, 2]]，输出 ['Aa1','Aa2','Ab1','Ab2','Ba1','Ba2','Bb1','Bb2']

function numarr(arr: Array<Array<number | string>>): Set<string> {

  const setarr = new Set<string>()
  const vr: { [str: string]: string } = {}
  _backtrack(arr, setarr, 0)
  return setarr
}

function _backtrack(arr: Array<Array<number | string>>, setarr: Set<string>, index: number, x: string = '', str: string = ''): void {
  x += str
  if (!arr[index]) {
    setarr.add(x)
    return
  }
  for (let z = 0; z < arr[index].length; z++) {
    _backtrack(arr, setarr, index + 1)
  }
}




console.log(numarr([['A', 'B', 'C'], ['a', 'b', 'c'], [1, 2]]))

